/* 导入vuex对象 */
import {createStore} from 'vuex'
/* 实例化状态管理器对象 */
const store = createStore({
    /* 1、状态管理（可以理解为存储的是全局变量） */
    state:{
        mycount:0,
        testName:"张三丰",
        arr:[3,6,7,9,12,8],
        students:[
            {
                sid:1,
                sname:"雷蒙凌",
                sex:"女"
            },
            {
                sid:2,
                sname:"像章鱼",
                sex:"女"
            },
            {
                sid:3,
                sname:"公侄",
                sex:"男"
            }
        ]
    },
    /* 同步方法:作用就是修改状态中的变量 
        不建议在mutations中使用axios或者setTimeout
    */
    mutations:{
        /* 方法携带默认参数state，表示状态管理state
            特点：声明的时候需要指定，
            但是调用的时候不需要传值
        */
        increment(state){
            state.mycount++;
        },
        add(state,step){
            state.mycount+=step;
        },
        updateName(state,{name,index}){
            //已知Vuex中通过actions提交mutations要通过context.commit(mutations,object)的方式来完成
            console.log('进入同步函数mutations中',name,index)
            state.students[index].sname=name;
        }

    },
    actions:{
        updateStuName({commit},{name,index}){
            console.log('进入异步函数actions中',name,index)
            //调用同步函数修改状态
            commit("updateName",{name,index})
        }
    },
    //类似于计算属性。一般用于对状态进行二次处理
    getters:{
        ouArr(state){
            return state.arr.filter(a=>a%2==0);
        }
    }
})
/* 导出对象 */
export default store